import { LoggerComponent } from '../../components';
import { HintAlertInfo } from '../../declarations';
import { ccclass } from '../../decorators';

/**
 * - 作者: DoooReyn
 * - 日期: 2023.11.01
 * - 名称: HintAlert
 * - 描述: 警告提示基类
 */
@ccclass('HintAlert')
export class HintAlert extends LoggerComponent {
    /** 警告提示配置 */
    protected _cfg: HintAlertInfo;

    /**
     * 添加警告提示
     * @param cfg 警告提示配置
     */
    public async show(cfg: HintAlertInfo): Promise<void> {
        this.logger.debug('添加提示');
        this._cfg = cfg;
        this.setContent();
        await this.onTransitionEnter();
    }

    /**
     * 设置提示内容
     * @param content 提示内容
     * @description 根据需要重写此方法
     */
    protected setContent() {}

    /** 确认时调用 */
    protected async onConfirm() {
        this._cfg && this._cfg.onConfirm && this._cfg.onConfirm();
        await this.hide();
    }
    
    /** 拒绝时调用 */
    protected async onReject() {
        this._cfg && this._cfg.onReject && this._cfg.onReject();
        await this.hide();
    }

    /** 移除提示 */
    public async hide() {
        await this.onTransitionExit();
        this.node.destroy();
    }

    /**
     * 进入表现
     * @description 根据需要重写此方法
     */
    protected async onTransitionEnter(): Promise<void> {}

    /**
     * 退出表现
     * @description 根据需要重写此方法
     */
    protected async onTransitionExit(): Promise<void> {}
}
